﻿// --------------------------------------------------------------------------------------------------------------------
// <copyright file="IFileUseCase.cs" company="">
//   
// </copyright>
// <summary>
//   The FileUseCase interface.
// </summary>
// --------------------------------------------------------------------------------------------------------------------

namespace Libium.UseCases
{
    using System;

    using Libium.Core;

    /// <summary>
    ///   The FileUseCase interface.
    /// </summary>
    public interface IFileUseCase : IUseCase
    {
        #region Public Events

        /// <summary>
        ///   The file changed.
        /// </summary>
        event Action<IFileUseCase> FileChanged;

        #endregion

        #region Public Properties

        /// <summary>
        ///   Gets the clear command.
        /// </summary>
        ICommand ClearCommand { get; }

        /// <summary>
        ///   Gets the copy command.
        /// </summary>
        ICommand CopyCommand { get; }

        /// <summary>
        ///   Gets the cut command.
        /// </summary>
        ICommand CutCommand { get; }

        /// <summary>
        ///   Gets the details text.
        /// </summary>
        string DetailsText { get; }

        /// <summary>
        ///   Gets or sets the file path.
        /// </summary>
        string FilePath { get; set; }

        /// <summary>
        ///   Gets the load command.
        /// </summary>
        ICommand BrowseCommand { get; }

        /// <summary>
        ///   Gets or sets the mime types.
        /// </summary>
        MimeType[] MimeTypes { get; set; }

        /// <summary>
        ///   Gets the open command.
        /// </summary>
        ICommand EditCommand { get; }

        /// <summary>
        ///   Gets the paste command.
        /// </summary>
        ICommand PasteCommand { get; }

        /// <summary>
        ///   Gets the refresh command.
        /// </summary>
        ICommand RefreshCommand { get; }

        /// <summary>
        ///   Gets the save as command.
        /// </summary>
        ICommand SaveAsCommand { get; }

        /// <summary>
        ///   Gets the text.
        /// </summary>
        string Text { get; }

        #endregion
    }
}